home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-14 | 2.0 KB | 101 lines | [TEXT/MPS ] |
- /* This tests a simple DLG-based scanner plus (...)? predicates */
-
- <<
- class ANTLRToken : public ANTLRCommonToken {
- virtual ANTLRLightweightToken *makeToken(TokenType tt, ANTLRChar *txt, int line)
- {
- ANTLRToken *t = new ANTLRToken;
- t->setType(tt); t->setText(txt); t->setLine(line);
- return t;
- }
- };
-
- /* We could have used ANTLRCommonBacktrackingToken here; i.e.,
- typedef ANTLRCommonBacktrackingToken ANTLRToken;
- */
-
- #include "DLGLexer.h"
-
- main()
- {
- DLGFileInput in(stdin);
- DLGLexer scan(&in,2000);
- ANTLRTokenBuffer pipe(&scan, 3, 30);
- ANTLRToken aToken;
- scan.setToken(&aToken);
- Expr parser(&pipe);
- parser.init();
-
- parser.begin();
- }
-
- void doit(Expr *p)
- {
- printf("LT(1) is %s\n", ((ANTLRToken *)p->LT(1))->getText());
- printf("LT(2) is %s\n", ((ANTLRToken *)p->LT(2))->getText());
- printf("LT(3) is %s\n", ((ANTLRToken *)p->LT(3))->getText());
- printf("LT(4) is %s\n", ((ANTLRToken *)p->LT(4))->getText());
- printf("LT(5) is %s\n", ((ANTLRToken *)p->LT(5))->getText());
- printf("LT(6) is %s\n", ((ANTLRToken *)p->LT(6))->getText());
- printf("LT(7) is %s\n", ((ANTLRToken *)p->LT(7))->getText());
- printf("LT(8) is %s\n", ((ANTLRToken *)p->LT(8))->getText());
- printf("LT(9) is %s\n", ((ANTLRToken *)p->LT(9))->getText());
- printf("LT(10) is %s\n", ((ANTLRToken *)p->LT(10))->getText());
- printf("LT(11) is %s\n", ((ANTLRToken *)p->LT(11))->getText());
- }
- >>
-
- #token "[\ \t\n]+" <<skip();>>
- #token Eof "@"
-
- class Expr { /* Define a grammar class */
-
- begin
- : <</*doit(this);*/>>
- e
- ;
-
- e : ( list "=" )? list "=" list Eof
- <<printf("list = list\n");>>
- | list Eof
- <<printf("list\n");>>
- ;
-
- list: "\(" (IDENTIFIER|NUMBER)* "\)"
- ;
-
- predict
- : ( "\(" (IDENTIFIER|NUMBER)* "\)" "=")?
- | "\(" "\)" "="
- ;
-
- /*
- #token INT "int"
- #token SEMI ";"
- #token STAR "\*"
- #token ASSIGN "="
-
- begin: "extern" "char" declarator ";"
- ;
-
- e : (decl)?
- | expr
- ;
-
- expr: IDENTIFIER "=" NUMBER
- ;
-
- decl: "int" declarator ";"
- ;
-
- declarator
- : ( "\*" )? "\*" declarator
- | IDENTIFIER
- ;
- */
-
- }
-
- #token IDENTIFIER "[a-z]+"
- #token NUMBER "[0-9]+"
-